package upc.edu.business;

import java.util.ArrayList;

import upc.edu.bean.CartaFianza;
import upc.edu.bean.Usuario;

public class AdmCartaFianza {
public ArrayList<CartaFianza> cartas;

public AdmCartaFianza() {
	cartas = new ArrayList<CartaFianza>();
}

public void registrarCarta(int idTarea,int nroCartaFianza, int nroContrato, String bancoEmisor,
		String tipo, String proveedor, int nroProceso, double importe,
		String fecven, String responsable, String comentario) throws Exception {
	if (nroCartaFianza ==0) {
		throw new Exception("Debe Ingresar el nro de carta fianza");
	}
	if (proveedor.isEmpty()) {
		throw new Exception("Debe seleccionar al proveedor");
	}
	
	CartaFianza nuevaCarta = new CartaFianza(idTarea,
			nroCartaFianza, nroContrato, bancoEmisor,
		 tipo,  proveedor,  nroProceso,  importe,
			 fecven,  responsable,  comentario);
	cartas.add(nuevaCarta);
}

public String modificaCartaFianza(CartaFianza cf) {
	try {
		String mensaje = "Codigo incorrecto. No se puedo modificar la carta fianza";
		for (CartaFianza carta : cartas) {
			if (carta.getIdTarea() == cf.getIdTarea()) {
				if (carta.getEstado().equalsIgnoreCase("Confirmado")) {
					mensaje = "Carta Fianza confirmada: No se puede actualizar";
				} else {
					mensaje = "Se modifico la Carta Fianza";
					carta.setNroCartaFianza(cf.getNroCartaFianza());
					carta.setNroContrato(cf.getNroContrato());
					carta.setBancoEmisor(cf.getBancoEmisor());
					carta.setTipo(cf.getTipo());
					carta.setProveedor(cf.getProveedor());
					carta.setNroProceso(cf.getNroProceso());
					carta.setImporte(cf.getImporte());
					carta.setFecven(cf.getFecven());
					carta.setResponsable(cf.getResponsable());
					carta.setComentario(cf.getComentario());
					carta = cf;
				}
			}
		}
		return mensaje;
	} catch (Exception ex) {
		return "Se produjo un error inesperado";
	}
}

public void eliminarCartaFianza(int idTarea) {
	CartaFianza carta = buscarCartaFianza(idTarea);
	if (carta != null) {
		cartas.remove(carta);
	}
}

public CartaFianza buscarCartaFianza(int idTarea) {
	for (CartaFianza carta : cartas)
		if (carta.getIdTarea() == idTarea)
			return carta;
	return null;
}

public int getTotalCartas() {
	return cartas.size();
}

public void confirmar(int idTarea) {
	for (CartaFianza carta : cartas) {
		if (carta.getIdTarea() == idTarea) {
			carta.setEstado("Confirmado");
		}
	}
}

public void notificarUsuarios(int idTarea, ArrayList<Usuario> usuarios) {
	for (CartaFianza carta : cartas) {
		if (carta.getIdTarea() == idTarea) {
			carta.setNotificacion(usuarios);
		}
	}
}

public void agregaUsuarioNotificacion(int idTarea,Usuario usuario){
	for (CartaFianza carta : cartas) {
		if (carta.getIdTarea() == idTarea) {
			carta.getNotificacion().add(usuario);
		}
	}
}

public void eliminaUsuarioNotificacion(int idTarea,Usuario usuario){
	//Busco la Carta Fianza en el ArrayList
	for (CartaFianza carta : cartas) {
		if (carta.getIdTarea() == idTarea) {
			//Busco en el ArrayList de Usuarios a notificar
			for (Usuario user : carta.getNotificacion()) {
				if(user.getIdUsuario() == usuario.getIdUsuario()){
					carta.getNotificacion().remove(usuario);
				}
			}
		}
	}
}

public int numeroUsuarios(int idTarea){
	for (CartaFianza carta : cartas)
		if (carta.getIdTarea() == idTarea)
			return carta.getNotificacion().size();
	return 0;
}
}
